class Concurso::PremioController < ApplicationController

  def list
    conditions = {}
    conditions[:tipo] = Concurso::PREMIOS
    conditions[:status_id] = 1
    
    if !perfil_nacional?
      conditions[:ejecutivo_id] = session[:user]
      
    end
    
    @concursos = Concurso.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE, :order => 'fecha_inicio', :conditions => conditions
    
  end

  def show
    @concurso = Concurso.find(params[:id])
    
  end

  def new
    @concurso = Concurso.new
    3.times {|x| @concurso.concurso_premios << ConcursoPremio.new(:lugar => x + 1)}
    @concurso.concurso_premio_marcas << ConcursoPremioMarca.new
    @premios = Catalogo.find_by_nombre('Premios').entradas_catalogo
    @marcas = Familia.cuervo
    ejecutivo = Ejecutivo.find(session[:user])
    @centros = ejecutivo.centros
    
  end

  def create
    @concurso = Concurso.new(params[:concurso])
    @concurso.ejecutivo_id = session[:user]
    @concurso.tipo = Concurso::PREMIOS
    
    if perfil_ejecutivo?
      @concurso.status_id = 0
    elsif mando_medio?
      @concurso.status_id = 1
    end

    if @concurso.save
      flash[:notice] = "El Concurso por Premios se agrego correctamente."
      redirect_to :action => "index"
      
    else
      @premios = Catalogo.find_by_nombre('Premios').entradas_catalogo
      @marcas = Familia.cuervo
      ejecutivo = Ejecutivo.find(session[:user])
      @centros = ejecutivo.centros
      
      render :action => "new"
      
    end
  end
  
  def index
    list
    render :action => 'list'
    
  end
  
  def txt_export
    ejecutivo = Ejecutivo.find(session[:user])
    these_children = find_children_ids(ejecutivo)

    if perfil_nacional?
      @concursos = Concurso.find(:all)
    else
      conditions = {}
      conditions[:ejecutivo_id] = these_children
      @concursos = Concurso.find(:all, :conditions => conditions)
    end
    
    report = StringIO.new
    CSV::Writer.generate(report, ',') do |csv|
      # encabezados
      csv << [
        "No Concurso", "Centro de Consumo", "Nombre", "Fecha Inicio", "Fecha Termino",
        "Observaciones", "Lugar", "Premio", "Otro"
      ]
      
      @concursos.each do |c|
        c.concurso_premios.each do |p|
          csv << [
            p.concurso.consecutivo, Centro.find(p.concurso.centro_id).nombre_comercial, p.concurso.nombre, p.concurso.fecha_inicio, p.concurso.fecha_termino,
            p.concurso.observaciones, p.lugar, Catalogo.valor('Premios', p.premio_id), p.otro
          ]
        end
      end
    end
    
    report.rewind
    send_data(report.read,
      :type => 'text/csv; charset=iso-8859-1; header=present',
      :filename => 'concursos-premios.csv')
    
  end
  
  def acumulados
    @concurso = Concurso.find(params[:id])
    @premios = @concurso.concurso_premios
    centro = Centro.find(@concurso.centro)
    @participantes = centro.empleados

    personal_temp = Hash.new    
    @participantes.each do |p|
      personal_temp[p.nombre_completo] = @concurso.copas_vendidas_premios(p.id)
    end
    personal = personal_temp.sort {|a,b| b[1]<=>a[1]}

    ix = 0
    @tabla = Array.new
    @premios.each do |p|
      renglon = Array.new(4)
      renglon[0] = p.lugar
      renglon[1] = p.premio_id
      renglon[2] = personal[ix][0] unless personal[ix].nil?
      renglon[3] = personal[ix][1] unless personal[ix].nil?
       @tabla << renglon
      ix += 1
    end
  end
  
  def edit
    @concurso = Concurso.find(params[:id])
    @status = Catalogo.find_by_nombre('Status Items').entradas_catalogo
    
  end
  
  def update
    @concurso = Concurso.find(params[:id])
    if @concurso.update_attributes(params[:concurso])
      flash[:notice] = 'El Concurso se actualizo correctamente.'
      redirect_to :action => 'list'
      
    else
      render :action => 'edit', :id => @concurso
      
    end    
    
  end

  def search
    unless params[:search].blank?
      conditions = ["tipo=2 AND concatenado LIKE ? AND ejecutivo_id=?",
        "%#{params[:search]}%",
       session[:user]] unless params[:search].nil?
      @concursos = BusquedaConcurso.paginate :page => params[:page], :per_page => DEFAULT_PER_PAGE,
        :order => 'fecha_inicio DESC',
        :conditions => conditions
      #      :conditions => Centro.conditions_by_like(params[:search])
      @concursos_count = @concursos.size
      logger.info "Resultado de la busqueda: #{@concursos_count} concursos encontrados"
    else
      list
    end
    render :action =>'search', :layout => true
    
  end
end
